#!/bin/env bash

# Copyright (c) 2023 az13js
# 基金分类/classify-funds is licensed under Mulan PSL v2.
# You can use this software according to the terms and conditions of
# the Mulan PSL v2.
# You may obtain a copy of Mulan PSL v2 at:
#          http://license.coscl.org.cn/MulanPSL2
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF
# ANY KIND,EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
# NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
# See the Mulan PSL v2 for more details.

:<<eof
    这个脚本为执行项目基本功能提供一个方便的命令行操作入口。你需要先切换到脚本
所在的目录，再执行脚本。当你不带任何参数执行脚本的时候，脚本将输出说明信息。使
用参数-h或者--help也可以让脚本输出帮助信息。更多如何使用脚本的说明，请通过利用
上述的参数来从脚本的输出中得到，或者你也可以直接查看脚本的代码来理解脚本运作。
eof

# 输出如何使用此脚本的说明信息
function print_help_info()
{
    cat <<eof
    为了进行聚类分析，你首先需要下载，然后建立格式化后的csv文件，最后再执行
kmeans算法。以下是帮助你理解本工具使用的说明。

--help, -h

    输出脚本支持的参数的功能，也就是现在你看到的这个说明内容。可以帮助你理解脚
本具备的功能。除了 --help 和 -h 可以调出此说明之外，不带任何参数也可以调出。

--download, -d

    执行下载功能。此命令参数会让脚本调用 python 命令来执行 download_excel.py 脚
本。并且在下载前会删除和重建 data 目录，下载后会利用 date -I 命令获取日期并拷贝
data 目录并以日期命名。简而言之你重复执行，本地的 data 目录和当前日期命名的目录
的内容会被新下载的文件覆盖。所以此参数最好的使用方式是每天只执行一次。

--buildcsv, -b

    建立一个格式化后的csv文件。文件位于reports目录。fund_sort_average_nav.csv，
这是格式化后的数据，是没有标题的表格文件。这一步花费的时间可能会比较久。

--kmeans, -k

    运行K-Means算法，分析csv文件。可能耗时较久。最终分类结果finally_report.csv。
分类结果是没有标题的csv表格，第一列表示基金代码，最右边一列表示分类标签。
eof
}

# 执行python脚本下载功能，返回命令执行结果。一般返回0是执行成功
function download_excel()
{
    rm -rf data && \
    mkdir data && \
    python download_excel.py && \
    cp -r data "$(date -I)"
    return $?
}

# 格式化数据，建立CSV文件
function build_price_csv()
{
    python build_reports.py
    return $?
}

# 运行K-Means算法的脚本，分析CSV文件内容。
function run_kmeans()
{
    python km_app.py
    exit $?
}

case $1 in
    --download)
        download_excel
        exit $?
        ;;
    -d)
        download_excel
        exit $?
        ;;
    --buildcsv)
        build_price_csv
        exit $?
        ;;
    -b)
        build_price_csv
        exit $?
        ;;
    --kmeans)
        run_kmeans
        exit $?
        ;;
    -k)
        run_kmeans
        exit $?
        ;;
    --help)
        print_help_info
        ;;
    -h)
        print_help_info
        ;;
    *)
        print_help_info
        ;;
esac
